package com.kaguya.Iterator;

/**
 * 迭代器模式：保证多个集合实现有一个统一的迭代实现。
 * Iterator接口提供两个接口，一个是hasNext():boolean 一个是next():Object
 * hashNext() 判断该遍历元素是否有下一个元素，返回布尔值
 * next() 返回当前正在遍历的元素并且指向下一个元素
 */
public class Test {
    public static void main(String[] args) {
        Object[] item = {"hello","world","candy","thanks"};
        ContainerImpl container = new ContainerImpl(item);

        Iterator iterator = container.getIterator();

        while (iterator.hasNext()) {
            System.out.println(iterator.next());
        }
    }
}
interface Iterator {

    /**
     * 判断该遍历元素是否有下一个元素，返回布尔值
     * @return
     */
    boolean hasNext();

    /**
     * 回当前正在遍历的元素并且指向下一个元素
     * @return
     */
    Object next();
}

interface Container {

    /**
     * 获取一个迭代器
     * @return
     */
    public Iterator getIterator();
}

class ContainerImpl implements Container {

    public Object[] items;

    public ContainerImpl(Object[] items) {
        this.items = items;
    }

    @Override
    public Iterator getIterator() {
        return new IteratorImpl();
    }

    class IteratorImpl implements Iterator {

        int index;

        @Override
        public boolean hasNext() {
            if(index < items.length ) {
                return true;
            }
            return false;
        }

        @Override
        public Object next() {
            if(this.hasNext()) {
                return items[index++];
            }
            return null;
        }
    }
}